import thin_render from "../../lib/thin_render.mjs";
import datarover from "../../lib/datarover.mjs";

/**
 * 渲染表格底部
 * @param {HTMLElement} table - 表格元素
 * @param {Object} template - 模板配置对象
 * @param {string} mode - 渲染模式(read/edit)
 */
export function renderFooter(table, template, mode) {
  // 检查是否需要渲染底部
  if (mode === "edit" || template.rowinsert || hasSummary(template)) {
    let tfoot = document.createElement("tfoot");
    table.appendChild(tfoot);

    // 渲染汇总行
    if (hasSummary(template) && typeof template.summarydatapath === "string") {
      let tr = document.createElement("tr");
      tfoot.appendChild(tr);
      tr.thin_data = datarover(tfoot, template.summarydatapath);

      for (let col of template.gridview) {
        if (col.summary !== undefined) {
          let value = datarover(tr, col.summary);
          if (value === undefined) {
          } else if (col.NumberFormat) {
            // 渲染数字格式
            thin_render(tr, {
              td: new Intl.NumberFormat("en-US", col.NumberFormat).format(
                value
              ),
              class: col.class,
            });
          } else if (col.DateTimeFormat) {
            // 渲染日期时间格式
            value = value?.replace(/\//g, "-");
            value = new Date(`${value}`);

            thin_render(tr, {
              td: !isNaN(value.getTime())
                ? new Intl.DateTimeFormat(col.DateTimeFormat).format(
                    Date.UTC(
                      value.getFullYear(),
                      value.getMonth(),
                      value.getDate(),
                      value.getHours(),
                      value.getMinutes(),
                      value.getSeconds(),
                      value.getMilliseconds()
                    )
                  )
                : "",
              class: col.class,
            });
          } else {
            // 渲染普通文本
            thin_render(tr, { td: `[[${col.summary}]]`, class: col.class });
          }
        } else {
          // 空单元格
          thin_render(tr, { td: "", class: col.class });
        }
      }
    }
  }
}

/**
 * 检查是否有汇总列
 * @param {Object} template - 模板配置对象
 * @returns {boolean} 是否存在汇总列
 */
function hasSummary(template) {
  if (template.gridview) {
    for (let col of template.gridview) {
      if (col.summary !== undefined) {
        return true;
      }
    }
  }
  return false;
}
